#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试脚本 - 验证环境设置和依赖
"""

import os
import sys
import importlib

def test_imports():
    """测试必要的包是否已安装"""
    print("=== 测试依赖包 ===")
    
    required_packages = [
        'numpy', 'pandas', 'matplotlib', 'seaborn', 
        'sklearn', 'scipy', 'shap'
    ]
    
    missing_packages = []
    
    for package in required_packages:
        try:
            importlib.import_module(package)
            print(f"✓ {package}")
        except ImportError:
            print(f"✗ {package} - 未安装")
            missing_packages.append(package)
    
    if missing_packages:
        print(f"\n缺少以下包: {', '.join(missing_packages)}")
        print("请运行: pip install " + " ".join(missing_packages))
        return False
    else:
        print("\n✓ 所有依赖包都已安装")
        return True

def test_file_structure():
    """测试文件结构"""
    print("\n=== 测试文件结构 ===")
    
    current_dir = os.path.dirname(os.path.abspath(__file__))
    
    # 检查必要目录
    required_dirs = ['code', '源域数据集']
    for dir_name in required_dirs:
        dir_path = os.path.join(current_dir, dir_name)
        if os.path.exists(dir_path):
            print(f"✓ {dir_name}/")
        else:
            print(f"✗ {dir_name}/ - 不存在")
            return False
    
    # 检查必要文件
    code_dir = os.path.join(current_dir, 'code')
    required_files = [
        'feature_extraction.py',
        'ablation_study.py', 
        'pca_feature_reduction.py',
        'tree_model_shap_analysis.py',
        'feature_selection_guide.py'
    ]
    
    for file_name in required_files:
        file_path = os.path.join(code_dir, file_name)
        if os.path.exists(file_path):
            print(f"✓ {file_name}")
        else:
            print(f"✗ {file_name} - 不存在")
            return False
    
    print("\n✓ 文件结构正确")
    return True

def test_data_availability():
    """测试数据可用性"""
    print("\n=== 测试数据可用性 ===")
    
    current_dir = os.path.dirname(os.path.abspath(__file__))
    data_dir = os.path.join(current_dir, '源域数据集')
    
    if not os.path.exists(data_dir):
        print("✗ 源域数据集目录不存在")
        return False
    
    # 检查是否有.mat文件
    mat_files = []
    for root, dirs, files in os.walk(data_dir):
        for file in files:
            if file.endswith('.mat'):
                mat_files.append(os.path.join(root, file))
    
    if mat_files:
        print(f"✓ 找到 {len(mat_files)} 个.mat文件")
        print(f"  示例: {os.path.basename(mat_files[0])}")
        return True
    else:
        print("✗ 未找到.mat文件")
        return False

def main():
    """主函数"""
    print("=== 任务1环境测试 ===")
    
    # 测试依赖包
    imports_ok = test_imports()
    
    # 测试文件结构
    structure_ok = test_file_structure()
    
    # 测试数据可用性
    data_ok = test_data_availability()
    
    print("\n=== 测试结果 ===")
    if imports_ok and structure_ok and data_ok:
        print("✓ 环境设置正确，可以运行任务1")
        print("\n建议运行方式:")
        print("python run_task1_simple.py")
    else:
        print("✗ 环境设置有问题，请检查上述错误")
        
        if not imports_ok:
            print("- 安装缺少的依赖包")
        if not structure_ok:
            print("- 检查文件结构")
        if not data_ok:
            print("- 检查数据文件")

if __name__ == "__main__":
    main()
